/**
 * 提取对象属性值
 *
 * @param arr 待提取对象数组
 * @param field 待提取的属性名
 * @return [] 提取后的数组
 * @author: 沐雨
 * @time: 2020-04-01
 * @Last Modified by: 沐雨
 * @Last Modified time: 2022-07-12 12:32:14
 */
export function extract<T, U extends keyof T>(arr: T[], field: U): T[U][] {
  return arr.map((item) => item[field]).filter((x) => x !== undefined)
}

/**
 * 提取对象属性值
 * 提取对象属性值
 *
 * @param obj 待提取对象
 * @param key 待提取的属性名
 * @returns 提取后的值
 * @author 沐雨
 * @time 2020-07-07 20:20:37
 */
export function getAttribute<T, F extends keyof T>(obj: T, key: F): T[F] {
  return obj[key]
}

/**
 * 根据属性名获取对象属性值
 *
 * @param data 待提取的数据
 * @param keys 待提取的属性名
 * @param join 是否需要拼接，默认不拼接
 * @param conjunction 分隔符，默认为空
 * @returns 拼接后的结果
 */
export function getValuesFromObjectByKes<T extends Record<string, any>, K extends keyof T>(
  data: T,
  keys: K[],
  join?: boolean,
  conjunction?: string
): string | string[] {
  if (typeof keys === 'string') {
    return data[keys]
  }
  const result = keys.map((k) => data[k]).filter((x) => x !== '市辖区')
  return join ? result.join(conjunction ?? '') : result
}

/**
 * 获取函数返回值类型
 */
export type GetFunReturnType<T> = T extends (...args: any[]) => infer R ? R : T
